# 1. 基础入门

# Windows 下搭建 Go 开发环境-安装和配置 SDK

# SDK

  1. SDK 的全称 (Software Development Kit 软件开发工具包)
  2. SDK 是提供给开发人员使用的,其中包含了对应开发语言的工具包

# 下载 SDK 工具包

  1. Go 语言的官网为:golang.org , 因为各种原因,可能无法访问。
  2. SDK 下载地址:Golang 中国 https://www.golangtc.com/download
  3. 如何选择对应的 sdk 版本

# windows 下安装 sdk

  1. Windows 下 SDK 的各个版本说明: Windows 下:根据自己系统是 32 位还是 64 位进行下载:
    1. 位系统:go1.14.6.windows-386.zip
    2. 位系统:go1.14.6.windows-amd64.zip
  2. 请注意:安装路径不要有中文或者特殊符号如空格等

# windows 下配置 Golang 环境变量

配置环境变量介绍:根据 windows 系统在查找可执行程序的原理,可以将 Go 所在路径定义到环境变量中,让系统帮我 们去找运行执行的程序,这样在任何目录下都可以执行 go 指令

在 Go 开发中,需要配置哪些环境变量:

环境变量 内容 说明
GOROOT c:/go 指定SDK的安装路径:c:/go
GOPATH c:/GO_MSG GO项目的路径
Path %GOROOT%\bin 添加SDK的/bin目录

# Go 语言入门

  1. 需求:要求开发一个 hello.go 程序,可以输出 "hello,world”

  2. 开发的步骤:开发这个程序/项目时,go 的目录结构怎么处理

    >GO_MSG	# 工作目录
    >>src # 原代码存储目录
    >>>go_code	# 代码存储目录
    >>>>project1  # 一个项目目录
    >>>>>main	# project1项目中的main目录
    >>>>>package # project1项目中的package目录
    
  3. 代码如下:

    package main //表示该 hello.go 文件所在的包是 main, 在 go 中,每个文件都必须归属于一个包。
    
    import "fmt" //表示:引入一个包,包名 fmt, 引入该包后,就可以使用 fmt 包的函数,比如:fmt.Println 
    
    func main() {  //func 是一个关键字,表示一个函数,  main 是函数名,是一个主函数,即我们程序的入口
    	fmt.Println("hello,MSG") //表示调用 fmt 包的函数 Println 输出 “hello,MSG” 
    }
    
  4. 通过 go build 命令对该 go 文件进行编译,生成 .exe 文件.

    先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行

    // cmd打开,进入go目录,c:/GO_MSG/src/go_code/project1/main
    go build hello.go  //执行后就会生成hello.exe文件在当前目录
    
  5. 运行 hello.exe 文件即可

    hello.exe
    
  6. 注意:通过 go run 命令可以直接运行 hello.go 程序 [类似执行一个脚本文件的形式]

    直接 go run go 源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发环境,否则无法执行。

    // cmd打开,进入go目录,c:/GO_MSG/src/go_code/project1/main
    go run hello.go
    
  7. go build报错注意

    // 报错内容
    
    go: cannot find main module; see 'go help modules'
    
    解决方案:
    	在当前目录下执行:go mod init
    

# Go开发编辑器

Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS CodeGolandVS Code是微软开源的编辑器,而Goland是jetbrains出品的付费IDE。

这里以VS Code 加插件做为go语言的开发工具来举例

# VS Code介绍

VS Code全称Visual Studio Code,是微软公司开源的一款免费现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,支持 Win、Mac 以及 Linux平台。

虽然不如某些IDE功能强大,但是它添加Go扩展插件后已经足够胜任我们日常的Go开发

# 下载安装

VS Code官方下载地址:https://code.visualstudio.com/Download

三大主流平台都支持,请根据自己的电脑平台选择对应的安装包

img

# 安装中文简体插件

点击左侧菜单栏最后一项管理扩展,在搜索框中输入chinese ,选中结果列表第一项,点击install安装。

安装完毕后右下角会提示重启VS Code,重启之后你的VS Cimg

# VSCode主界面介绍:

img

# 安装go扩展

现在我们要为我们的VS Code编辑器安装Go扩展插件,让它支持Go语言开发

img

# Go 程序开发的注意事项

  1. Go 源文件以 "go" 为扩展名。
  2. Go 应用程序的执行入口是 main()函数。 这个是和其它编程语言(比如 java/c)
  3. Go 语言严格区分大小写。
  4. Go 方法由一条条语句构成,每个语句后不需要分号(Go 语言会在每行后自动加分号),这也体现出 Golang 的简洁性。
  5. Go 编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
  6. go 语言定义的变量或者 import 的包如果没有使用到,代码不能编译通过。
  7. 大括号都是成对出现的,缺一不可

# Go 语言的转义字符(escape char)

说明:常用的转义字符有如下:

  1. \t : 表示一个制表符,通常使用它可以排版
  2. \n :换行符
  3. \ \:一个\
  4. \" :一个"
  5. \r :一个回车 fmt.Println("天龙八部雪山飞狐\r 张飞");

# 注释(comment)

  1. 介绍注释:

    1. 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性
    2. 注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
  2. Golang 中注释有两种形式

    1. 行注释 :// 注释内容
  3. 块注释(多行注释)

    1. /*

      注释内容

      */

  4. 使用细节

    1. 对于行注释和块注释,被注释的文字,不会被 Go 编译器执行。
    2. 块注释里面不允许有块注释嵌套 [注意一下]

# 规范的代码风格

正确的注释和注释风格

  1. Go 官方推荐使用行注释来注释整个方法和语句。
  2. 带看 Go 源码

正确的缩进和空白

  1. 使用一次 tab 操作,实现缩进,默认整体向右边移动,时候用 shift+tab 整体向左移
  2. 或者使用 gofmt 来进行格式化 [演示]

运算符两边习惯性各加一个空格

  1. 比如:2 + 4 * 5。

Go 语言的代码风格

package main 
import "fmt" 
func main() { 
    fmt.Println("hello,world!") 
}

//上面的写法是正确的. 

package main 
import "fmt" 
func main() { 
    fmt.Println("hello,world!")
}
//上面的写法不是正确,Go 语言不允许这样编写。 【Go 语言不允许这样写,是错误的!】

Go 设计者思想

  1. 一个问题尽量只有一个解决方法
  2. 一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅

# 第一个GO程序

package main1 // 包,表明代码所在的模块(包)

import "fmt" // 引入代码依赖

// 功能实现
func main() {
   fmt.Println("Hello World!")
}

# go install

go install表示安装的意思,它先编译源代码得到可执行文件,然后将可执行文件移动到GOPATH的bin目录下。因为我们的环境变量中配置了GOPATH下的bin目录,所以我们就可以在任意地方直接执行可执行文件了。

# 跨平台编译

默认我们go build的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?

只需要指定目标操作系统的平台和处理器架构即可:

SET CGO_ENABLED=0  // 禁用CGO,为什么要禁用CGO,因为使用了cgo的代码是不支持跨平台编译的
SET GOOS=linux  // 目标平台是linux
SET GOARCH=amd64  // 目标处理器架构是amd64

然后再执行go build命令,得到的就是能够在Linux平台运行的可执行文件了。

Mac 下编译 Linux 和 Windows平台 64位 可执行程序:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Linux 下编译 Mac 和 Windows 平台64位可执行程序:

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Windows下编译Mac平台64位可执行程序:

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build

# GO程序本身 - 原理

GO代码是使用包来组织的,包类似于其他语言中的库和模块。

一个包由一个或多个.go源文件组成,放在一个文件目录中,该文件目录的名字应该描述了包的作用,也充当了包引用的初始变量名称(可变)。

每个源文件的开始都用package来声明,如果是package main,那么指明了这个文件是属于那个包(主包)。

后面跟着它导入的其他包的列表,然后是存储在文件中的程度声明

名为main的包比较特殊,它是用来定义一个独立可执行的程序,而不是库,可以当成是整个程序的主入口。

我们需要告诉编译器源文件需要那么包,用package声明后面的import来导入这些包。

import声明必须要在package声明之后

# GO程序入口

  1. 必须引入 main 包:package main
  2. 必须是 main 方法:func main()
  3. 目录名跟文件名不一定是 main/main.go

# GO程序退出返回码

  1. Go 中 main 函数不支持任何返回值
  2. 通过 os.Exit 来返回状态:os.Exit正常的返回值为0
package main

import (
	"fmt"
	"os"
)

func main()  {
	fmt.Println("hello world")
	os.Exit(-1)
}

结果:
C:\GO_MSG\src\test>go run host.go
hello world
exit status 4294967295

# GO程序获取命令行参数

  1. main 函数不支持传入参数: func main(arg []string)
  2. 在程序中直接通过 os.Args 获取命令行参数
package main

import (
	"fmt"
	"os"
)

func main()  {
	fmt.Println("hello world")
	fmt.Println(os.Args)
	os.Exit(-1)
}

结果:
hello world
[C:\Users\admin\AppData\Local\Temp\go-build733291642\b001\exe\host.exe 111]
exit status 4294967295

# 结合使用

package main

import (
	"fmt"
	"os"
)

func main()  {
	if len(os.Args) > 1 {
		fmt.Println("在本程序下获取第一位参数:", os.Args[1])
		os.Exit(0)
	}
	os.Exit(-1)
}


不带参数执行结果:
C:\GO_MSG\src\test>go run host.go
exit status 4294967295


带参数执行结果:
C:\GO_MSG\src\test>go run host.go 111
在本程序下获取第一位参数: 111

# 小结和提示

学习编程最容易犯的错是语法错误 。Go 要求你必须按照语法规则编写代码。如果你的程序违反了 语法规则,例如:忘记了大括号、引号,或者拼错了单词,Go 编译器都会报语法错误,要求:尝试着去看懂编译器会报告的错误信息